import fs from 'fs';
import path from 'path';
import { Logger } from '../utils/logger.js';
import { fileURLToPath } from 'url';
import config from '../utils/config.js';

const logger = new Logger('[conf:docs]');

function generateMarkdown() {
  // 加载 YAML
  const scripts = config.yamlConfig;

  let md = '# NPM Scripts 文档\n\n';
  md += `> 📅 生成时间: ${new Date().toLocaleString('zh-CN')}\n\n`;
  md += '> 📝 数据源: `.scripts/scripts.yaml`\n\n';
  md += '---\n\n';

  // 生成目录
  md += '## 📚 目录\n\n';
  const categories = new Set();
  Object.values(scripts).forEach((s) => categories.add(s.category || '其他'));

  [...categories].forEach((cat) => {
    const anchor = cat.toLowerCase().replace(/\s+/g, '-');
    md += `- [${cat}](#${anchor})\n`;
  });
  md += '\n---\n\n';

  // 按分类生成文档
  const grouped = {};
  Object.entries(scripts).forEach(([name, info]) => {
    const scriptName = name.replace(/:/g, ':');
    const category = info.category || '其他';
    if (!grouped[category]) grouped[category] = [];
    grouped[category].push({ name: scriptName, ...info });
  });

  Object.entries(grouped).forEach(([category, items]) => {
    md += `## ${category}\n\n`;

    // 生成表格
    md += '| 命令 | 描述 |\n';
    md += '|------|------|\n';

    items.forEach((item) => {
      md += `| \`pnpm ${item.name}\` | ${item.description} |\n`;
    });
    md += '\n';

    // 生成详细说明
    md += '### 详细说明\n\n';
    items.forEach((item) => {
      md += `#### \`pnpm ${item.name}\`\n\n`;
      md += `${item.description}\n\n`;

      if (item.command) {
        md += '- **实际命令:**\n';
        md += `\`${item.command}\`\n`;
      }

      if (item.alias && item.alias.length > 0) {
        md += `- **别名:** ${item.alias.map((a) => `\`${a}\``).join(', ')}\n\n`;
      }

      if (item.examples && item.examples.length > 0) {
        md += '- **示例:**\n';
        item.examples.forEach((ex, index) => {
          md += `    - \`${ex}\`  ${config.getComment(['scripts', item.name, 'examples', index]).comment}\n`;
        });
        md += '\n';
      }

      if (item.tips) {
        md += `> 💡 **提示:** ${item.tips}\n\n`;
      }

      md += '---\n\n';
    });
  });

  // 生成脚注
  md += '## 🛠️ 维护说明\n\n';
  md += '1. 编辑 `.scripts/scripts.yaml` 来更新脚本配置\n';
  md += '2. 运行 `pnpm conf:docs` 重新生成此文档\n';
  md += '3. 运行 `pnpm conf:sync` 同步到 package.json\n';
  md += '4. 运行 `pnpm conf:valid` 验证一致性\n';

  return md;
}

// 执行
const __filename = fileURLToPath(import.meta.url);
const isMain = process.argv[1] === __filename;

if (isMain) {
  const markdown = generateMarkdown();
  const outputPath = path.join(config.rootDir, 'scripts.md');
  fs.writeFileSync(outputPath, markdown);
  logger.success('已生成 scripts.md');
  logger.info(`文件位置: ${outputPath}`);
}

export { generateMarkdown };
